#ifndef NETDISK_DIRFUNC_H_
#define NETDISK_DIRFUNC_H_
#include "zzh_header.h"
// NETDISK_DIRSTACK_H_

typedef struct dirNode_s {
  char data[128];  // 存储目录
  struct dirNode_s *pnext;
} dirNode_t;

typedef struct dirStack_s {  // 目录栈(链栈)
  dirNode_t *bottom;  // 栈底(根目录)
  dirNode_t    *top;  // 栈顶(当前目录)
  int size;  
} dirStack_t;

int initDirStack(dirStack_t *dirstack);
int pushDirStack(dirStack_t *dirstack, char *data);
int popDirStack(dirStack_t *dirstack);
int concatDirStack(dirStack_t *dirstack, char *pathname);
int cleanDirStack(dirStack_t *dirstack);
int destroyDirStack(dirStack_t *dirstack);
int copyDirStack(dirStack_t *copy, dirStack_t *paste);

// NETDISK_NETDISKASSIST_H_

int isAsset(const char *pathname);  // errno available
int getAbsDir(dirStack_t *pwd, char *pathname, char *abs_dir);

// NETDISK_NETDISKFUNC_H_

#include <sys/stat.h>

int cdFunc(dirStack_t *dirstack, const char* destdir);  // 相对 绝对
int pwdFunc(dirStack_t *dirstack, char *pwd_result);
int mkdirFunc(dirStack_t *dirstack, const char *pathname);  // 相对 绝对 不支持选项
int rmdirFunc(dirStack_t *dirstack, const char *pathname, char* error_msg);  // 相对 绝对 不支持选项

// 文件信息结构体
typedef struct {
  char mode_str[11];     // 文件类型与权限
  nlink_t nlink;         // 硬链接数
  const char *username;  // 拥有者名
  const char *gname;     // 拥有者组名
  off_t size;            // 文件大小
  char time_str[20];     // 修改时间
  char filename[1024];   // 文件名
} FileInfo;

int lsFunc(dirStack_t *dirStack, char *buf, char *result_buf);
#endif  // NETDISK_DIRFUNC_H_
